Страницы: 1
RSS
Формат ячейки - значение в ячейке, VBA импорт-экспорт таблиц
 
Здравствуйте! Подскажите пожалуйста, кто знает

исходные данные
- ячейка на листе отформатирована пользовательским форматом. Так сработала процедура экспорта из некоей программы. Ничего не поделаешь
Выглядит к примеру так  - 000000000458
Но если брать значение этой ячейки, то получается - 458. И никак не обходится.
Что нужно
- нужно откуда-то считать именно 000000000458. Когда я пытаюсь выполнить импорт в БД, то импортируется, 458 вместо 000000000458
То есть проблема в том, что 000000000458 я могу лишь видеть, а все операции осуществляются с 458. Причем в строке значений (та. что сверху на панели) отображается 458, т.е. уже не то, что на экране.  
 
UDF
Код
Function ФЗНАЧ(ячейка As Range) As String
    ФЗНАЧ = CStr(Format(ячейка.Value, ячейка.NumberFormat))
End Function
Изменено: Sanja - 03.04.2015 11:51:02
Согласие есть продукт при полном непротивлении сторон
 
не сработало.  
 
а у меня сработало
Изменено: Sanja - 03.04.2015 15:53:56
Согласие есть продукт при полном непротивлении сторон
 
Кажется, так
Код
Sub tt()
Dim S As String
For Each cell In Selection
With cell
 S = .Text
 .NumberFormat = "@"
 .Value = S
End With
Next cell
End Sub



 
согласен, в виде функции работает. Спасибо огромное, это прорыв, я не знал такого приема.

Но мне нужно вот что - я не хочу трогать таблицу, у меня отчет выгружается в excel и потом я считываю его процедурой в Access.
Стал тренироваться преобразовывать формат по вашему примеру, решил по наивности что можно вот так

.Cells(i, 9) = CStr(Format(.Cells(i, 7).Value, .Cells(i, 7).NumberFormat))

То есть в цикле перебросить значение из одной ячейки, где формат 000000000455 в другую, чтобы значение перенеслось 000000000455
Вот это и не сработало.
Можете подсказать, возможен такой ход? Чтобы без функции
 
MSeg1968, макрос как раз и меняет содержимое в исходных ячейках в выделенном диапазоне на соответствующие им текстовые и меняет сам формат ячеек на текстовый.
 
Тогда макросом МВТ,  только немного допилить, что-бы значения копировал и вставлял куда нужно, а не заменял
Согласие есть продукт при полном непротивлении сторон
 
уточняю вопрос
Есть ли какой-то способ считывать через макрос содержимое ячейки и на лету преобразовывать этот формат, чтобы не совершать манипуляций на самом листе.
Я просто пока решил попробовать, подобрать формат команды, поэтому и перенес значения из одной ячейки в другую.
В рабочей ситуации мне нужно научиться читать ячейку в виде 00000000000455
 
На лету, так на лету. Выделите диапазон - запустите макрос
Код
Sub tt_t()
For Each cell In Selection
    MsgBox cell.Text
Next cell
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, просто я понял, что желательно, чтобы значения оставались на исходном месте. Вот, вставляет в соседний столбец
UPD нашел ошибку :(, исправил
Код
Sub tt()
Dim Rng As Range, S As String
Set Rng = Selection.Offset(0, 1)
Rng.Value = Selection.Value
For Each cell In Rng
With cell
S = .Text
.NumberFormat = "@"
.Value = S
End With
Next cell
End Sub
Изменено: МВТ - 03.04.2015 17:50:30 (Исправил ошибку)
 
МВТ, просто MSeg1968, изначально задачу некорректно сформулировал, а мы тут извращаемся.
Согласие есть продукт при полном непротивлении сторон
 
Ура! Все отлично, все было на поверхности - оказывается cell.Text возвращает то, что надо! Я и подумать не мог, элементарно!
Я думал, что надо форматом как-то выкручиваться, а тут оказывается все так просто.
Но зато я узнал несколько новых штук
Большое спасибо за помощь!
 
я в access втягивал эту таблицу, ну и писал там просто
Код
   db.Execute ("INSERT INTO Perem ( Tab, Name, Source, Target, TargetID, Dat, Stat ) " _
        & "SELECT '" & WS.Cells(i, 2) & "', '" & WS.Cells(i, 3) & "', '" _
        & WS.Cells(i, 5) & "','" & WS.Cells(i, 6) & "', '" & [B][SIZE=10pt]WS.Cells(i, 7)[/SIZE][/B] & "','" _
        & WS.Cells(i, 8) & "', '" & WS.Cells(i, 4) & "';")

А теперь поставил  WS.Cells(i, 7).Text и все поехало правильно!!!!
Что характерно, не спросил бы - никогда бы не додумался
Страницы: 1
Наверх