String VBA上字符串和名称之间的差异。引用不同工作表上的范围的字符串
大家好,堆栈溢出社区!我仍然是VBA的一个大麻烦,但我正试图弄清楚这里到底发生了什么。我在下面为你们拼凑了一些代码。我正在处理工作表数据,但每次运行下面的代码时,我都会在“Set Banks=DataS.Range(“X9:X11”)”行上收到一个错误,说明我无法使用代码中的DataS.Range部分。如果我使用它没有数据。范围我很好 我想弄明白的是为什么我可以给TypofDeal分配一个范围没有问题,但是我不能给银行分配相同的范围,即使有两个字符串 代码最终需要能够将银行分配给DS.Range(“X9:X11”),这是一个类似的范围,但在不同的表上 互联网告诉我使用名称。添加功能,但我不明白为什么我需要!!“名称”和“字符串”之间有什么区别 谢谢大家String VBA上字符串和名称之间的差异。引用不同工作表上的范围的字符串,string,vba,String,Vba,大家好,堆栈溢出社区!我仍然是VBA的一个大麻烦,但我正试图弄清楚这里到底发生了什么。我在下面为你们拼凑了一些代码。我正在处理工作表数据,但每次运行下面的代码时,我都会在“Set Banks=DataS.Range(“X9:X11”)”行上收到一个错误,说明我无法使用代码中的DataS.Range部分。如果我使用它没有数据。范围我很好 我想弄明白的是为什么我可以给TypofDeal分配一个范围没有问题,但是我不能给银行分配相同的范围,即使有两个字符串 代码最终需要能够将银行分配给DS.Range
Dim DS As Worksheet
Set DS = ThisWorkbook.Worksheets("Design")
Dim DataS As Worksheet
Set DataS = ThisWorkbook.Worksheets("Data")
Dim TypeofDeal As String, Banks As String
Dim Bank As Range, Label As Range, Line As Range
Set Line = DataS.Range("V22:W22")
TypeofDeal = DataS.Range("W21")
Banks = DataS.Range("X9:X11")
If TypeofDeal = "Purchase" Then
Line.Delete
Else
Line.Select
Selection.Insert Shift:=xlDown
Selection.HorizontalAlignment = xlCenter
Selection.VerticalAlignment = xlCenter
Set Label = DataS.Range("V22") 'Variable
Set Bank = DataS.Range("W22") 'Variable
Label.Select
Selection.Value = "Financing Company"
Selection.Borders.Weight = xlThin
Bank.Select
Bank.Value = " "
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="=" & Banks
.IgnoreBlank = True
.InCellDropdown = True
End With
Selection.Borders.Weight = xlThick
Selection.Borders.ColorIndex = 23
End If
出现此错误的原因:
Banks = DataS.Range("X9:X11")
但是,不是在这个问题上:
TypeofDeal = DataS.Range("W21")
原因是:
TypeofDeal = DataS.Range("W21")
仅使用一个单元格中的值,这是有效的。鉴于:
Banks = DataS.Range("X9:X11")
试图将3个单元格中的值分配给一个字符串,这是无效的
如果需要将所有三个单元格中的值添加到同一字符串中,可以执行以下操作:
Banks = DataS.Range("X9").Value & DataS.Range("X10").Value & DataS.Range("X11").Value
如果单凭这一点还不能解决您的问题,我需要查看相关单元格中的数据,然后我可以测试您的整个解决方案,或许可以提供更全面的答案
此外,我认为在这种情况下使用命名范围没有任何实质性的好处,至少不基于您提供的代码。在您的代码示例中,您不使用
Set
justBanks=DataS.range(“X9:X11”)
。不需要使用命名范围,但它们非常有用。你应该阅读,你应该谷歌。这个视频系列很棒,明白了。真正疯狂的是代码与Banks=(“X9:X11”)一起工作!!!这不是很奇怪吗?!还有名字。函数是验证列表代码在数据位于其他工作表上时唯一接受的函数。否则,Banks=(“X9:X11”)代码工作得很好。当我尝试Banks=(“X9:X11”)
时,Banks只返回“X9:X11”,而不是单元格中的实际数据。