我之前將常量字串定義為單元格,如下所示:
Const LID_LIFTED As String = "A19"
一切似乎都很好,但是當我將批處理檔案從 PDF 轉換為 Excel 時,行會稍微移動,因此 A19 的值最終可能會下降到 A18 甚至 A16。我得出的結論是,最好在字串出現時抓住我的常量值,然后考慮偏移量或某事。
問題是,我不知道如何將字串的一部分分配給我的 Const 值
我試過:
Const LID_LIFTED As String = Like *"Lifted*"
但它不正確。
我還考慮了另一種選擇:
https://excelmacromastery.com/excel-vba-find/
Dim rng1 As Range
Set rng1 = Range("A1:A100").Find("*lifted*")
Const LID_LIFTED As String = rng1
但在這種情況下,我有一個錯誤:
“需要常量運算式”
下面的另一個選項:
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
Dim String1 As String
String1 = ws.Range("A1:A100").Find(what:="lifted", lookat:=xlWhole)
拋出錯誤:
“物件變數或未設定變數”
第三個選項:
Dim txt1 As Long
txt1 = Application.WorksheetFunction.Match("*lifted*", Range("A1:A100"), 0)
也沒有作業,出現以下錯誤:
“無法獲取 WorksheetFunction 類的 Match 屬性”
如何在我的 const 值中包含字串的一部分?
uj5u.com熱心網友回復:
常量必須在編譯時可決議- 它們不在運行時計算。這意味著常量需要是一個固定值(或基于某個其他固定值),而不是在分配該值之前需要運行代碼的東西。
Find()回傳一個Range物件(或者Nothing如果沒有匹配),所以你不能安全地將回傳值分配給一個字串
Const LID_LIFTED As String = "Lifted"
Dim f As Range
'specify a worksheet, and provide all arguments to Find which might affect the outcome...
Set f = Sheets("Sheet1").Range("A1:A100").Find(What:=LID_LIFTED, _
Lookat:=xlPart, lookin:=xlValues)
If Not f Is Nothing then
'do something with f
End If
您的最后一個選項應該有效(對我也有效),但您可能應該為要搜索的范圍指定一個特定的作業表。WorksheetFunction.Match()如果沒有匹配,則會引發運行時錯誤 - 這就是您所看到的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/388338.html
上一篇:使用隨機值復制和粘貼單元格
下一篇:將范圍復制到具有相同格式的作業表
