Excel 脱离上下文并在列中选择填充值

Excel 脱离上下文并在列中选择填充值,excel,vba,Excel,Vba,我有两个问题,我一整天都在努力解决。首先,每当我试图观察任何变量时,不管它在“观察”栏中说什么。我甚至试着把一个变量设置为等于一个数字,然后看着它,它仍然给了我答案 第二,我试图将B列中所有有值的值放入数组(标记名),这让我感到很尴尬。这是for循环的要点。断章取义的事情对这个案子没有帮助 只是作为参考,“ist”是i作为一个字符串,但后来我添加了B只是为了缩短代码 不要担心那些已经在运行的代码会有额外的DIM 谢谢你的帮助 Sub GenTags() Dim FolderPath As St

我有两个问题,我一整天都在努力解决。首先,每当我试图观察任何变量时,不管它在“观察”栏中说什么。我甚至试着把一个变量设置为等于一个数字,然后看着它,它仍然给了我答案

第二,我试图将B列中所有有值的值放入数组(标记名),这让我感到很尴尬。这是for循环的要点。断章取义的事情对这个案子没有帮助

只是作为参考,“ist”是i作为一个字符串,但后来我添加了B只是为了缩短代码

不要担心那些已经在运行的代码会有额外的DIM

谢谢你的帮助

Sub GenTags()

Dim FolderPath As String
Dim OutputFileNum As Integer
Dim TagName(100) As String
Dim i As Long
Dim ist As String

Sheets("Parameters").Activate


For i = 1 To ActiveWorkbook.ActiveSheet.Columns("B").End(xlDown).Row
  ist = "B" & CStr(i)
  TagName(i) = ActiveWorkbook.Sheets("Parameters").Range(ist)
Next

End Sub

如果您只需要具有值的单元格,则可能应该将其作为循环的一部分。我认为这应该行得通。我还将数组更改为变体,以防字符串和数字混合使用

Sub GenTags()

Dim FolderPath As String
Dim OutputFileNum As Integer
Dim TagName(100) As Variant
Dim i As Long, c As Long
Dim ist As String

Sheets("Parameters").Activate


For i = 1 To ActiveWorkbook.ActiveSheet.Columns("B").End(xlDown).Row
    If Not IsEmpty(Range("B" & i)) Then
        TagName(c) = Range("B" & i).Value
        c = c + 1
    End If


Next


End Sub

这种方法更细粒度,可以处理列中的空单元格

只需自定义“>>>>”部分就很容易了

Sub-GenTags()
将FolderPath设置为字符串
Dim OutputFileNum为整数
像线一样暗
'定义对象变量
将源表设置为工作表
将工作表设置为工作表
将源范围变暗为范围
暗淡的cellEval As范围
'定义其他变量
将sourceSheetName设置为字符串
将参数名称设置为字符串
将sourceColumn设置为字符串
Dim标记名()作为变量
在我之前很久就有昏暗的柜台了
变暗非空计数器长度
模糊的细胞和长的细胞一样
'>>>定制以满足您的需要
sourceSheetName=“Sheet1”
paramSheetName=“参数”
sourceColumn=“B”
'初始化对象-更改图纸名称
设置sourceSheet=ThisWorkbook.Worksheets(sourceSheetName)
Set-paramSheet=ThisWorkbook.Worksheets(paramSheetName)
Set sourceRange=Application.Union(sourceSheet.Columns(sourceColumn).SpecialCells(xlCellTypeConstants),sourceSheet.Columns(sourceColumn).SpecialCells(xlCellTypeFormulas))
'获取b列中有多少项
totalCells=sourceRange.Cells.Count
'重新确定数组的尺寸以包括所有项目
重读标记名(totalCells)
'初始化计数器(为了便于记录)
计数器=0
对于sourceRange中的每个cellEval
'添加非空值
如果Trim(cellEval.Value)vbNullString,则
'将其存储在数组中
标记名(计数器)=cellEval.Value
计数器=计数器+1
如果结束
下一个cellEval
'重拨以仅保留已使用的项目
重读保留标记名(计数器-1)
端接头

如果有帮助,请告诉我

感谢您的回复。不幸的是,我不得不把这个项目搁置到昨天,但我尝试了两种答案,结果都不起作用。我决定改变整个代码的方向,让它工作起来。感谢您的帮助,很抱歉回复太晚。

您不需要
ist
部分-这将更加清楚:
TagName(i)=ActiveWorkbook.Sheets(“参数”).Range(“B”&i).Value
Sub GenTags()

Dim FolderPath As String
Dim OutputFileNum As Integer


Dim ist As String

' Define object variables
Dim sourceSheet As Worksheet
Dim paramSheet As Worksheet
Dim sourceRange As Range
Dim cellEval As Range

' Define other variables
Dim sourceSheetName As String
Dim paramSheetName As String
Dim sourceColumn As String


Dim tagName() As Variant
Dim counter As Long ' before i
Dim nonBlankCounter As Long
Dim totalCells As Long


' >>> Customize to fit your needs
sourceSheetName = "Sheet1"
paramSheetName = "Parameters"
sourceColumn = "B"

' Initialize objects - Change sheets names
Set sourceSheet = ThisWorkbook.Worksheets(sourceSheetName)
Set paramSheet = ThisWorkbook.Worksheets(paramSheetName)
Set sourceRange = Application.Union(sourceSheet.Columns(sourceColumn).SpecialCells(xlCellTypeConstants), sourceSheet.Columns(sourceColumn).SpecialCells(xlCellTypeFormulas))

' Get how many items in column b are
totalCells = sourceRange.Cells.Count

' Redimension the array to include all the items
ReDim tagName(totalCells)

' Initilize the counter (for documentation sake)
counter = 0

For Each cellEval In sourceRange

    ' Add non empty values
    If Trim(cellEval.Value) <> vbNullString Then

        ' Store it in the array
        tagName(counter) = cellEval.Value

        counter = counter + 1

    End If

Next cellEval

' Redim to leave only used items
ReDim Preserve tagName(counter - 1)

End Sub