Задать вопрос

Через что можно сделать ввод большого текста с переходами на новые строки в VBS?

Cейчас у меня реализован ввод текста через текстовый файл, который вызывается скриптом, ожидает ввода в файл текста, и после сохранения файла нажатию кнопки этот тхт файл открывается макросом и считывается построчно. Хочу упростить скрипт, чтобы не использовать временный текстовый файл.

InputBox принимает строки без enter - если вводить туда текст с абзацами, он подхватывает лишь последний. Умеет ли VBA вызывать какой-нибудь компонент помимо InputBox, например, memo, принимающий помимо прочих символов также и chr(13) ?
  • Вопрос задан
  • 3156 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
omegastripes
@omegastripes
dim completed

msgbox inputboxml("Enter text:", "Multiline inputbox via HTA", "default" & vbcrlf & vbtab & "multiline" & vbcrlf & "text")

function inputboxml(prompt, title, defval)
	set window = createwindow()
	completed = 0
	defval = replace(replace(replace(defval, "&", "&amp;"), "<", "&lt;"), ">", "&gt;")
	with window
		with .document
			.title = title
			.body.style.background = "buttonface"
			.body.style.fontfamily = "consolas, courier new"
			.body.style.fontsize = "8pt"
			.body.innerhtml = "<div><center><nobr>" & prompt & "</nobr><br><br></center><textarea id='hta_textarea' style='font-family: consolas, courier new; width: 100%; height: 580px;'>" & defval & "</textarea><br><button id='hta_cancel' style='font-family: consolas, courier new; width: 85px; margin: 10px; padding: 3px; float: right;'>Cancel</button><button id='hta_ok' style='font-family: consolas, courier new; width: 85px; margin: 10px; padding: 3px; float: right;'>OK</button></div>"
		end with
		.resizeto 700, 700
		.moveto 100, 100
	end with
	window.hta_textarea.focus
	set window.hta_cancel.onclick = getref("hta_cancel")
	set window.hta_ok.onclick = getref("hta_ok")
	set window.document.body.onunload = getref("hta_onunload")
	do until completed > 0
		wscript.sleep 10
	loop
	select case completed
	case 1
		inputboxml = ""
	case 2
		inputboxml = ""
		window.close
	case 3
		inputboxml = window.hta_textarea.value
		window.close
	end select
end function

function createwindow()
    rem source http://forum.script-coding.com/viewtopic.php?pid=75356#p75356
    dim signature, shellwnd, proc
    on error resume next
    signature = left(createobject("Scriptlet.TypeLib").guid, 38)
    do
		set proc = createobject("WScript.Shell").exec("mshta ""about:<head><script>moveTo(-32000,-32000);</script><hta:application id=app border=dialog minimizebutton=no maximizebutton=no scroll=no showintaskbar=yes contextmenu=no selection=yes innerborder=no icon=""%windir%\system32\notepad.exe""/><object id='shellwindow' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shellwindow.putproperty('" & signature & "',document.parentWindow);</script></head>""")
		do
			if proc.status > 0 then exit do
			for each shellwnd in createobject("Shell.Application").windows
				set createwindow = shellwnd.getproperty(signature)
				if err.number = 0 then exit function
				err.clear
			next
		loop
	loop
end function

sub hta_onunload
	completed = 1
end sub

sub hta_cancel
	completed = 2
end sub

sub hta_ok
	completed = 3
end sub


UPD: убрал ненужный тэг "html" в строке "set proc = ..."
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы