所以我在 excel 上制作了一个简单的宏(并且可以工作),只需打开另一个 excel 文件,然后转到选定的单元格并转到末尾(在正确的方向上),以获得最新填充的单元格(因为它扩展了 1每个月)。
我需要得到 2 分,结尾和结尾是什么 - 73 有一个范围,在我选择了最新的单元格后,我得到了列号(即 A = 1、6 = f 等......),并且然后我调用了一个函数来解析它以再次返回列字母。
在这样做的同时,我遇到了一些让我在逻辑上感到困惑并且无法弄清楚为什么会发生这种情况的事情,所以我希望那里的大师可以向我解释这一点。
正如您将在代码中看到的,我声明了 2 个整数;
- 开始
- 鳍
到达我想要的单元格后,我将 fin = 设置为 ActiveCell 列。然后我只是做;
Start = fin - 73
但是当我调用函数 ConvertToLetter 时,当我通过 start 时出现类型不匹配错误,所以我像这样强制它通过;
ref1 = ConvertToLetter(CInt(start))
它工作得很好。
完整代码;
Sub Test()
Dim rng As Range
Dim start, fin As Integer
Dim ref1, ref2 As String
Dim file, tabn As String
Dim XL As Object
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Set rng = Range("C149")
file = "<File name>"
tabn = "<Tab Name>"
Set XL = CreateObject("Excel.Application")
XL.Application.Visible = True
XL.AskToUpdateLinks = False
XL.DisplayAlerts = False
XL.Application.Workbooks.Open (file)
Set wkb = XL.ActiveWorkbook
Set wks = wkb.Sheets(tabn)
wks.Activate
Set rng = wks.Range("C149")
rng.Select
rng.End(xlToRight).Select
fin = XL.ActiveCell.Column
start = fin - 73
If VarType(start) = vbInteger Then Debug.Print "Its an int!"
If VarType(start) = vbLong Then Debug.Print "Its a long!"
If VarType(start) = vbSingle Then Debug.Print "Its a single?"
If VarType(start) = vbDouble Then Debug.Print "ew double"
wkb.Close
XL.AskToUpdateLinks = True
XL.DisplayAlerts = True
XL.Quit
Set rng = Range("a1")
rng.Select
ref1 = ConvertToLetter(CInt(start))
ref2 = ConvertToLetter(fin)
End Sub
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
请原谅格式和丑陋的 if 语句(那只是为了向自己保证 start 是一个 int
让我感到困惑的是,当它通过 if 语句时,它返回“Its an int!”
那么为什么不解析 let start 的函数呢?
我设法避免
ref1 = ConvertToLetter(CInt(start))
一般来说,如果我事先应用了这个
Before:
start = fin - 73
After:
start = (fin - 73)
而且我不再需要使用 CINT 解析它。
但是有人可以解释为什么它不认为 start 是一个 int 吗?为什么将它封装在括号中呢?
因为我的脑袋我有这个逻辑;
例如,如果您有 2 个 int,并对它们应用任何数学问题,则结果将始终是 int;10 / 3 = 3,不是 3.33333333
那么为什么在这种情况下它不是 int 呢?
非常感谢。