String VBA上字符串和名称之间的差异。引用不同工作表上的范围的字符串

String VBA上字符串和名称之间的差异。引用不同工作表上的范围的字符串,string,vba,String,Vba,大家好,堆栈溢出社区!我仍然是VBA的一个大麻烦,但我正试图弄清楚这里到底发生了什么。我在下面为你们拼凑了一些代码。我正在处理工作表数据,但每次运行下面的代码时,我都会在“Set Banks=DataS.Range(“X9:X11”)”行上收到一个错误,说明我无法使用代码中的DataS.Range部分。如果我使用它没有数据。范围我很好 我想弄明白的是为什么我可以给TypofDeal分配一个范围没有问题,但是我不能给银行分配相同的范围,即使有两个字符串 代码最终需要能够将银行分配给DS.Range

大家好,堆栈溢出社区!我仍然是VBA的一个大麻烦,但我正试图弄清楚这里到底发生了什么。我在下面为你们拼凑了一些代码。我正在处理工作表数据,但每次运行下面的代码时,我都会在“Set Banks=DataS.Range(“X9:X11”)”行上收到一个错误,说明我无法使用代码中的DataS.Range部分。如果我使用它没有数据。范围我很好

我想弄明白的是为什么我可以给TypofDeal分配一个范围没有问题,但是我不能给银行分配相同的范围,即使有两个字符串

代码最终需要能够将银行分配给DS.Range(“X9:X11”),这是一个类似的范围,但在不同的表上

互联网告诉我使用名称。添加功能,但我不明白为什么我需要!!“名称”和“字符串”之间有什么区别

谢谢大家

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
just
Banks=DataS.range(“X9:X11”)
。不需要使用命名范围,但它们非常有用。你应该阅读,你应该谷歌。这个视频系列很棒,明白了。真正疯狂的是代码与Banks=(“X9:X11”)一起工作!!!这不是很奇怪吗?!还有名字。函数是验证列表代码在数据位于其他工作表上时唯一接受的函数。否则,Banks=(“X9:X11”)代码工作得很好。当我尝试
Banks=(“X9:X11”)
时,Banks只返回“X9:X11”,而不是单元格中的实际数据。