2015-07-13 4 views
0

Я работаю над простой командой импорта VBA для ввода данных с другого листа excel, содержащего данные из используемого средства отчетности. Данные выводятся таким образом, что одна ячейка содержит многострочный текст, как если бы кто-то написал его, используя alt + enter, чтобы получить возврат каретки.Строка Autosize, содержащая данные, возвращаемые каретой

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

Я попробовал этот код, прежде чем использовать AutoSize, но он не работал в связи с вопросом я уже говорил, где авторазмер только делает это одна линия

For counter = 1 To entries 

    Rows(counter).EntireRow.AutoFit 

Next 

EDIT: Я должен упомянуть ячейку в вопросе который должен быть autofit, является объединенной ячейкой, и это текст завернут. Извините, что не включил его ранее.

+0

попробуйте установить wraptext перед автоподготовкой – 99moorem

+0

обертывание текста уже включено, ничего не делает – AnDanDan

+0

у вас есть объединенные ячейки? У меня всегда была эта проблема с автофитингом объединенных ячеек. – Krishna

ответ

0

Если мои ячейки содержат длинный текст, используя строки (счетчик) .EntireRow.AutoFit не сможет отобразить весь текст. Мне нужно, чтобы задать ширину столбцов в их макс перед использованием кода:

Columns("A:AA").ColumnWidth = 200 'depends on possible max width and which columns 
    Columns("A:AA").EntireColumn.AutoFit 

    For counter = 1 To entries 
     Rows(counter).EntireRow.AutoFit 
    Next i 
+0

Хм, будет ли это работать и для объединенной ячейки? – AnDanDan

+0

Интересно. Он не работает для объединенных ячеек. –

0

Может быть, проблема в формате ячеек (обертка)

Попробуйте этот путь

For counter = 1 To entries 
    Rows(counter).WrapText = True 
    Rows(counter).EntireRow.AutoFit 
Next 

EDIT:

Если вы слили клетки на разных строках вы можете попробовать что-то вроде этого:

'I set number of rows and columns only for example 
entries = 10 
LastCol = 20 

Set Rng = Range(Cells(1, 1), Cells(entries, LastCol)) 
For Each mCell In Rng 
    If Not mCell.Value = "" Then 
     If mCell.Address <> mCell.MergeArea.Address Then 
      mStr = CStr(mCell.Value) 
      mLF = 1 
      For x = 1 To Len(mStr) 
       If Mid(mStr, x, 1) = vbCr Or Mid(mStr, x, 1) = vbLf Then 
        mLF = mLF + 1 
       End If 
      Next x 
      mHeight = mLF * 7 'Set the value you need for each line of text 
      Range(mCell.MergeArea.Address).RowHeight = mHeight 
     End If 
    End If 
Next mCell 
+0

В ячейке уже включен перенос текста. Извините, что не упоминал об этом раньше. Это то, что я пытался (эффективно) не получить) – AnDanDan

+0

Странно Это сработало для меня! Вы уверены, что после вставки в ячейки wraptext все еще включен? – genespos

+0

Да, когда я создавал объединенные ячейки, поскольку мне они нужны через VBA, это было Слияние, настройка выравнивания центра, а затем включение переноса текста. К сожалению, это не так, как я планировал. Я пробовал играть с настройками только с ленты, и мне тоже не повезло. – AnDanDan

Смежные вопросы