Вне контекста и выбор заполненных значений в столбце - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть 2 проблемы, которые я пытался решить весь день.Прежде всего, когда я пытаюсь посмотреть любую переменную, независимо от того, что она говорит в панели часов.Я попытался даже просто установить переменную равной числу и посмотреть ее, и она все равно дала мне.

Во-вторых, я пытаюсь поместить все значения в столбце B, которые имеют значение, в массив (TagName) иэто ведет меня вверх по стене.Это точка цикла for.Вне контекста это не помогает делу.

Просто для справки "ist" был i в виде строки, но затем я добавил B, чтобы сократить код.

Не беспокойтесь о дополнительных затратах для кода, который уже работает

Спасибо за вашу помощь!

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

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Этот подход немного более детализирован и учитывает пустые ячейки в столбце.

Легко просто настроить раздел ">>>>"

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

Позвольте мнезнаю, поможет ли это!

0 голосов
/ 20 февраля 2019

Спасибо за ваши ответы.К сожалению, до вчерашнего дня мне пришлось отложить этот проект, но я попробовал оба ответа, и они не сработали.Я решил пойти по другому пути со всем кодом и получил его работать.Спасибо за вашу помощь и извините за поздний ответ.

0 голосов
/ 06 февраля 2019

Если вы хотите только ячейки со значениями, вы, вероятно, должны иметь это как часть вашего цикла.Я думаю, что это должно работать.Я также изменил массив в качестве варианта на случай, если у вас есть сочетание строки и чисел.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...