Привет всем,
есть ли у нас на форуме специалисты по VBA? помощь нужна. Написал небольшую програмку и в одном месте немогу немного разобраться.
Привет всем,
есть ли у нас на форуме специалисты по VBA? помощь нужна. Написал небольшую програмку и в одном месте немогу немного разобраться.
раскачжи что конкретно хочешь зделать, если будет нужно показывай часть кода .
Думаю помощь найдется.
да особых секретов нет, кому может пригодится ешё.
задача такая :
я получаю от клиента таблицу в Excel. Они эти данные вытащили с SAP и передали мне. У меня нет доступа к этой системе SAP.
вот примерно так она выглядит:
PLANTID DIVISIONID PARAMID VVALUE DEFINITION
1 2 AdminRoleID 22 AdminRole
1 2 DefaultDateTo 31.12.9999 Auslaufzeitpunkt
1 2 DefaultDivisionID 2 ID (Division)
1 2 DefaultPlantID 1 ID (Plant)
1 2 DefaultRoleID 1 Defaultrolle
1 2 DimIdCarProject 9 DimID Carproject
1 2 DimIdYear 19 Id Dimension year
теперь мне надо эти данные занести в наш ДБ. Т.е. получается надо для каждой строки писать Insert - Statments . Таблица может иметь до 3000 записей и в ручную это прописывать - гемарно.
Для этого я написал небольшой Макро. Который это делает автоматически. И выносит готовые " Inserts" в отдельный файл. Всё работает,
за исключением что в этом файле каждя строка наченается и заканчевается с ковычками ( Hochkomma : " das ist mein ausgabe string " ) . немогу разобраться как эти ковычи убрать. ...
вот прога:
Option Explicit
Const OUTPUT_FOLDER As String = "d:\temp\"
Const TABLE_NAME As String = "TEST"
Const TABLE_START As Integer = 4
Const PLANID As String = "A"
Const DIVISIONID As String = "B"
Const PARAMID As String = "C"
Const VVALUE As String = "D"
Const DEFINITION As String = "E"
' Insert erzeugen
Private Sub CommandButton1_Click()
Dim lastEntry, i As Integer
Dim sqlString, fileName As String
' Erstelle den Dateinamen
fileName = "output_insert_" & Date & "_" & Time & ".txt"
fileName = Replace(fileName, ":", "-")
fileName = OUTPUT_FOLDER & fileName
' Erstelle eine neue Datei für die Ausgabe
Open fileName For Output As #1
' Position des letzten Eintrages in der Tabelle
lastEntry = Range("A65535").End(xlUp).Row
' Alle Einträge in der Tabelle durchgehen
For i = TABLE_START To lastEntry
' Setze den SQL String zusammen
sqlString = "INSERT INTO " & TABLE_NAME & _
"(" & _
toString(Range("A" & i).value) & ", " & _
toString(Range("B" & i).value) & ", " & _
toString(Range("C" & i).value) & ", " & _
toString(Range("D" & i).value) & ", " & _
toString(Range("E" & i).value) & _
");"
Write #1, sqlString
Next i
Close #1
MsgBox ("Ausgabe in " & fileName)
Exit Sub
errorHandler:
MsgBox ("Fehler aufgetreten")
End Sub
Function toString(value As String) As String
toString = "'" & value & "'"
End Function
Показать весь код
и 2: дополнительно хотел бы ещё теже Inserts" выдать в соседнем столбце . (т.е. в 6 - ом столбце (Spalte F) )
для этого я делаю следущее:
ЦитатаSheets("Sheet1").Range("F4:F7").value = sqlString
Тут получется что он прописывает этот столбец, но только последними данными. т.е. в столбе Ф у меня стоит:
INSERT INTO KEZ_SYSTEMDEFAULT_TEST('1', '2', 'DimIdYear', '19', 'Id Dimension year' );
INSERT INTO KEZ_SYSTEMDEFAULT_TEST('1', '2', 'DimIdYear', '19', 'Id Dimension year' );
INSERT INTO KEZ_SYSTEMDEFAULT_TEST('1', '2', 'DimIdYear', '19', 'Id Dimension year' );
INSERT INTO KEZ_SYSTEMDEFAULT_TEST('1', '2', 'DimIdYear', '19', 'Id Dimension year' );
INSERT INTO KEZ_SYSTEMDEFAULT_TEST('1', '2', 'DimIdYear', '19', 'Id Dimension year' );
есть какие либо идеи?
спасибо за ранее.
что то тишина, я к сожалению в таблицах не силен...
может все же кто отклинкнется...
вторую проблему решил.
а вот с ковычками что-то не как. Есть одна мысль зделать подсчёт всех знаков во всём стринге и тупо вырезать первый и последний знак. Но как - то .. не нравится мне этот ход решения, плюс прога усложняется...
должно что-то проще быть...
если офис после 2000, то есть гдет-то функция [replace], думаю она тебе поможет...
обра3ец:
String Replacement
This example shows how to do string replacement in Visual Basic.
ЦитатаПоказать весь код
Dim s As String
s = "Chilkat Software, Inc. : A software components company"
' Relace all occurances of a substring, case sensitive
s = Replace(s, "software", "hardware")
' prints "Chilkat Software, Inc. : A Hardware Components Company"
Print StrConv(s, vbProperCase)
' Replace all occurances, case-insensitive
s = "Chilkat Software, Inc. : A software components company"
s = Replace(s, "software", "hardware", 1, -1, vbTextCompare)
' prints "Chilkat Hardware, Inc. : A Hardware Components Company"
Print StrConv(s, vbProperCase)
' Replace only the 1st occurance, case-insensitive
startPos = 1
maxToReplace = 1
s = "Chilkat Software, Inc. : A software components company"
s = Replace(s, "software", "hardware", startPos, maxToReplace, vbTextCompare)
' prints "Chilkat Hardware, Inc. : A Software Components Company"
Print StrConv(s, vbProperCase)
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
на десертик...
ЦитатаAnführungszeichen in Strings
Пожалуйста зарегистрируйся для просмотра данной ссылки на страницу.
да спасибо , вечером вчера разобрался. как я и предпологал , всё еллемтарное - просто. Надо было при выдаче вместо "Write" - " Print" использовать. А за первый линк спасибо, можно кое что там другого посмотреть. Про десертик, надо вечером глянуть ... на работе заблокированно.