Все игры
Обсуждения
Сортировать: по обновлениям | по дате | по рейтингу Отображать записи: Полный текст | Заголовки
Артур Lion, 07-05-2008 02:49 (ссылка)

Без заголовка

Как перевести текст в разные раскладки?


Подключаемые библиотеки/компоненты:
нет

Стандартные компоненты:
- CommandButton;
- TextBox;
Код:
Option Explicit

Dim Selection As String
Dim aText As String
Dim i As Long

Private Sub RusLat()
Selection = Text1.Text
aText = Selection
Dim KeyS As String
Dim Pos As Long
KeyS = 0
Dim s(1) As String, n As String
s(0) = "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:" + Chr(34) + "ZXCVBNM<>~"
s(1) = "йцукенгшщзхъфывапролджэячсмитьбюёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ"
If Asc(Left(aText, 1)) > 127 Then KeyS = 1
For i = 1 To Len(aText)
Pos = InStr(s(KeyS), Mid(aText, i, 1))
If Pos = 0 Then n = n + Mid(aText, i, 1) Else n = n + Mid(s(1 - KeyS), Pos, 1)
Next i
aText = n
Text1.Text = aText
End Sub

Private Sub Command1_Click()
Call RusLat
End Sub

Private Sub Form_Load()
Text1.Text = "qwerty"
End Sub

Артур Lion, 07-05-2008 02:56 (ссылка)

Без заголовка

Сравнение файлов на идентичность


Private Sub Form_Load()
'замените пути файлов, которые вы хотите сравнить
Open "C:\1\convert1bmp.htm" For Binary As #1
Open "C:\1\convert2bmp.htm" For Binary As #2
issame% = True
If LOF(1) > LOF(2) Then
issame% = False
Else
whole& = LOF(1) \ 10000
part& = LOF(1) Mod 10000
buffer1$ = String$(10000, 0)
buffer2$ = String$(10000, 0)
start& = 1
For X& = 1 To whole&
Get #1, start&, buffer1$
Get #2, start&, buffer2$
If buffer1$ > buffer2$ Then
issame% = False
Exit For
End If
start& = start& + 10000
Next
buffer1$ = String$(part&, 0)
buffer2$ = String$(part&, 0)
Get #1, start&, buffer1$
Get #2, start&, buffer2$
If buffer1$ > buffer2$ Then issame% = False
End If
Close
If issame% Then
MsgBox "Файлы идентичны", 64, "Info"
Else
MsgBox "Файлы НЕ идентичны", 16, "Info"
End If
End Sub

Простой Excel

Я вот тут голову ломаю, не получается.
Как из двух таблиц №1 и №2 сделать одну №3 с помощью функций (ВПР, ЕСЛИ, Просмотр и т.д.) Excel.

Например:
№1
А
Б
В
Г

 и №2
А
Б
Д
Е

 Получить №3
А
Б
В
Г
Д
Е

настроение: Веселое

Метки: excel

Артур Lion, 07-05-2008 02:44 (ссылка)

Как сделать массив кнопок?

Как сделать массив кнопок?


Чтобы по нажатию ALT + Цифра, происходило событие Click выбранной кнопки.
На форме создайте 1 кнопку, скопируйте в буфер, вставьте.
Basic спросит – создать массив или нет? Отвечаем, Да.
Создаем 10 кнопок, от 0 до 9.
Свойство Caption у всех очищаем.

Подключаемые библиотеки/компоненты:
нет

Стандартные компоненты:
- CommandButton;
- Label;
Код:
Option Explicit
Dim i As Byte

Public Sub Rename(Index As Byte)
Label1.Caption = "Кнопка: " & Index
End Sub

Private Sub Command1_Click(Index As Integer)
Rename (Index)
End Sub

Private Sub Form_Load()
For i = 0 To 9
Command1(i).Caption = "&" & Trim(Str(i))
Next
Label1.Caption = "Нажмите на любую кнопку"
End Sub

Taras Zayats, 21-04-2012 20:32 (ссылка)

Пути повышения наглядности сложной формулы в Excel

Привет Всем!
Есть достаточно сложная формула, которую нужно разбить на строки для наглядности чтения и удобства внесения изменений.
Worksheets("Лист1").Range("AbsUn0").FormulaR1C1 = _
"=ROUND(МНИМ.ABS(МНИМ.ДЕЛ(МНИМ.ПРОИЗВЕД(КОМПЛЕКСН(ReZB,ImZB),КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1)),МНИМ.СУММ(КОМПЛЕКСН(ReZB,ImZB),КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1)),КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1))),3)"
Попробовал сделать вот так, но формула высвечивается красным цветом, что указывает на ошибку:

Worksheets("Лист1").Range("AbsUn0").FormulaR1C1 = _
"=ROUND(МНИМ.ABS(МНИМ.ДЕЛ(МНИМ.ПРОИЗВЕД(КОМПЛЕКСН(ReZB,ImZB), _ КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1)),МНИМ.СУММ(КОМПЛЕКСН(ReZB,ImZB), _
КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1)),КОМПЛЕКСН(ReZэкb1c1,ImZэкb1c1))),3)"



Как сделать окно Visual Basic в стиле Командной строки

Создайте форму и впишите код:

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long

Private Sub Form_Load()
SetWindowRgn Me.hWnd, 2, True
End Sub

Вопрос: относительный адрес

Всем привет!
Как в VBA прописывается относительный одрес? Пробовал "\имя файла" - выдает ошибку.

Taras Zayats, 01-01-2011 14:14 (ссылка)

Excel и VBA.Странность№1.Круговой массив дуг

Здравствуйте, уважаемые члены сообщества. И снова мне нужна Ваша помощь.
В следующих двух кодах на рабочем листе Excel  рисуется массив дуг, повернутых наружу и внутрь.
При выполнении этих двух кодов из массива дуг, повернутых наружу и внутрь, должны сложиться окружности.
Но на листе Excel у меня получились окружности при углах 0,90,180,270,360 градусов.
При других углах дуги почему-то не стыкуются в окружности.
С чем это связано и как этого избежать?
Ниже приведу коды на VBA, где  рисуется массив дуг, повернутых наружу и внутрь.

Sub ArcAroundMassiveOpen()
Dim i As Integer, k0 As Double, dn As Double, da As Double
Dim x0 As Double, y0 As Double, z As Double, R As Double
Const pi = 3.14159265358979

 x0 = 300: y0 = 300: R = 100: z = 10: k0 = 30: dn = 30: da = 180

  For i = k0 To 360 + k0 - dn Step dn
     x1 = x0 + R * Cos(i * pi / 180): y1 = y0 - R * Sin(i * pi / 180) - z
    ActiveSheet.Shapes.AddShape(msoShapeArc, x1, y1, z, z).Select
             Selection.Name = "arc_" & i & "_" & dn & "_" & da
        With Selection.ShapeRange.Adjustments
            .Item(1) = 90 + da + i
            .Item(2) = 90 + i
        End With
        With Selection.ShapeRange.Item("arc_" & i & "_" & dn & "_" & da)
            .Fill.Visible = msoFalse
            .Line.Weight = 0.75
            .Line.DashStyle = msoLineSolid
            .Line.ForeColor.RGB = RGB(100, 80, 150)
        End With
    Next i
End Sub
Sub ArcAroundMassiveClose()
Dim i As Integer, k0 As Double, dn As Double, da As Double
Dim x0 As Double, y0 As Double, z As Double, R As Double
Const pi = 3.14159265358979

 x0 = 300: y0 = 300: R = 100: z = 10: k0 = 30: dn = 30: da = 180

  For i = k0 To 360 + k0 - dn Step dn
     x1 = x0 + R * Cos(i * pi / 180): y1 = y0 - R * Sin(i * pi / 180) - z
    ActiveSheet.Shapes.AddShape(msoShapeArc, x1, y1, z, z).Select
             Selection.Name = "arcr_" & i & "_" & dn & "_" & da
        With Selection.ShapeRange.Adjustments
            .Item(1) = 90 + i
            .Item(2) = 90 + da + i
        End With
        With Selection.ShapeRange.Item("arcr_" & i & "_" & dn & "_" & da)
            .Fill.Visible = msoFalse
            .Line.Weight = 0.75
            .Line.DashStyle = msoLineSolid
            .Line.ForeColor.RGB = RGB(100, 80, 150)
        End With
    Next i
End Sub

Илья Surname, 11-03-2010 09:32 (ссылка)

О добавлении новых листов

Передо мной встала практическая задача - нужно добавить в модуль вот какую вещь - мне нужно чтобы при выполнении процедуры в текущую книгу Excel добавлялся новый лист, затем с одного из существующих листов копировался определенный диапазон на этот новый.
Возникла вот какая проблема - при создании нового листа Excel самостоятельно дает ему название например Sheet1, если же в книге уже существует лист с таким названием, то дается следующий порядковый номер, в данном случае Sheet2. Что ставит под угрозу дальнейшее использование этого нововставленного листа. Т.к. его имя часто непредсказвуемо. Например, если эта процедура уже один раз сработала создав в книге лист с названием Sheet1, и затем в ходе дальнейших действий этот Sheet1 был удален, то при повторном запуске процедуры Excel даст новому листу порядковый номер не 1 а следующий (хотя лист1 уже был удален). Что опять же затрудняет дальнейшие ссылки на вставленный процедурой лист в программе.

Идеальным решением было бы программируя добавление нового лисата в книгу, иметь возможность тут же дать ему имя по своему усмотрению. Но как это сделать? пока не знаю!

Файл в формате Excel 2003 по этой ссылке: http://files.mail.ru/T4QO4T
Буду благодарен за комменты и идеи

Программирование в Excel

Помогите в интересной задачке.
Мне надо сделать программу для учета продуктов и расхода. Может быть в VBAи нет проблем, но хочу проще – вExcel.
Есть перечень продуктов = 200 наименований:
1    хлеб     3 грн
2    сахар    7 грн
И т.д.
Нужно составить 50 блюд из этих продуктов.
Думаю так, чтобы легче и быстро:
Присвоить коды продуктам. Там,  на другом листе, в списке блюд ввожу код и хочу получить во втором столбике наименование продукта и в третьем – цену.
И составит меню для блюда. Как связать эти 3 значения и получить их при вводе только кода продукта в любом месте. Можно конечно сделать, но много мороки. Надо просто и гениально!

настроение: Надеющееся

Метки: программирование, excel

Taras Zayats, 04-11-2010 22:12 (ссылка)

как записать в коде наличие клавиши Shift или Ctrl

Сделал следующие действия:
1) нажал клавишу Shift  и нарисовал линию
2) нажал клавишу Ctrl и повернул линию относительно ее конца
Но макрос записал мне следующий код, пропустив такие важные действия как нажатие клавиш Shift и Ctrl.

Sub Macros1()
'
    ActiveSheet.Shapes.AddLine(84.75, 117.75, 153#, 236.25).Select
    Selection.ShapeRange.Flip msoFlipVertical
    Selection.ShapeRange.IncrementRotation 25.54

End Sub

Кто может подсказать как их можно программно учесть, написав правильно выше приведенный код Macros1().
В VBA есть keycode constants. Приведу их для клавиш Shift или Ctrl

Сonstants      Value    Description

vbKeyShift     0x10     Shift Key

vbKeyCtrl      0x11     Ctrl Key

Но как это сделать?

Taras Zayats, 16-02-2012 17:09 (ссылка)

Полезные сайти по VBA в Excel

Привет Всем!
Хочу поделиться одним сайтом по программированию в Excel на VBA. Поразил он меня тем, что здесь есть оригинальные нестандартные программки, которые можно скачать бесплатно и посмотреть потом код VBA в них. Для себя нашел тему программирование автофигур на VBA в Excel, особенно поразили программы: 
Фортепиано в Excel
Поиск точек на одной прямой
Простановка размеров для автофигур в Excel
Создание модели хищник-жертва средствами Excel
В общем сайт очень понравился, приглашаю всех желающих его посетить и найти для себя что-то полезное.

http://excelvba.ru

настроение: Довольное

как изменить программу?

Данная программа получает   сумму
элементов наборов блоков ячеек. 
Как изменить её чтобы она  получала сумму
квадратов элементов блока ячеек.
Sub t()
Dim Cell As Range, d As Integer, dd As Integer, Product As Single
Product = 1
Метка:
d = MsgBox(Title:="Наборы блоков ячеек", _
Prompt:="Имеются блоки ячеек?", _
Buttons:=4)
Select Case d
Case vbYes
Set Cell = Application.InputBox("Укажите нужный диапазон", "Выбор диапазона", Selection.Address, , , , , 8)
Range(Cell.Address).Select
For Each Cell In Selection.Cells
Product = Product * Cell
Next
GoTo Метка
Case vbNo
dd = MsgBox(Title:="Результаты расчетов", _
Prompt:="Произведение элементов наборов блоков ячеек равно = " & Product, _
Buttons:=0)
End Select
End Sub

Taras Zayats, 18-03-2012 17:47 (ссылка)

Как воспользоваться циклом при именовании адресов ячеек

Привет Всем! Заранее буду очень признателен за оказанную помощь.
Есть таблица расчета, где в ячейках по горизонтали введены буквы А, В, С и т.д, а по вертикали U, argU и т.д  .
        
         A  B C N AB BC CA  aa1 bb1 cc1  a1  b1  c1 n1  a1b1  b1c1  c1a1 aa2 bb2 cc2  a2 ..
U      UA
argU
ReU
ImU                ImAB
I

argI

ReI

ImI
и т.д.

Как можно сделать, чтобы на пересечении  А и U  и т.д. адрес ячейки назывался, например не B2, а UA или ImAB.
Попробовал записать макрос, при именовании ячейки D8, он мне выдал следующее
Sub Макрос 9()
    Range("D8").Select
    ActiveWorkbook.Names.Add Name:="phUA", RefersToR1C1:="=Лист1!R8C4"
End Sub
Попробовал написать программку для трех, но RefersToR1C1:="=Лист1R6C&dc"  не реагирует на переменную dc
Sub ProgNAMES()
 Dim dc As Integer, i As Integer
Dim phase As Variant
phase = Array(Array("A", "B", "C", "N", "AB", "BC", "CA", _
                "aa1", "bb1", "cc1", _
                "a1", "b1", "c1", "n1", "a1b1", "b1c1", "c1a1", _
                "aa2", "bb2", "cc2", _
                "a2", "b2", "c2", "n2", "a2b2", "b2c2", "c2a2"), _
        Array("U", "argU", "ReU", "ImU"), _
        Array("I", "argI", "ReI", "ImI"), _
        Array("Z", "argZ", "ReZ", "ImZ"), _
        Array("Y", "argY", "ReY", "ImY"), _
        Array("Zýê", "argZýê", "ReZýê", "ImZýê"))

For i = 0 To 3
dc = 2 + i
   Range("B6").Select
    ActiveWorkbook.Worksheets(Лист1!).Names.Add Name:="ph" & phase(1)(0) & phase(0)(i), RefersToR1C1:="=Лист1!R6C&dc"
   
Next i
End Sub

Что-то не получается правильно сделать

настроение: Надеющееся

Без заголовка

Как решить задачу двумерного массива? Доказать является ли данная квадратная матрица симметрической относительно побочной диагонали.

настроение: Внимательное

Сообщество гибнет?

Если мы не идем вперед, значит мы погибаем. Кто что скажет интересного на эту тему?

настроение: Задумчивое

Метки: excel, VBA, программирование

Taras Zayats, 06-12-2010 21:47 (ссылка)

Рисование в Excel. Круговой массив объектов

Мне нужно в Excel нарисовать круговой массив линий, которые расположены
под одинаковым углом друг другу. В Excel сделал программу, но с рисунка
видно, что линии расположены как-то неравномерно в круговом массиве.

С чем это связано и как все-таки сделать, чтобы на экране монитора это выглядело правильно? Код программы ниже:

Sub RADEK()

Dim i As Integer, r As Double

Dim x0 As Double, y0 As Double, x2 As Double, y2 As Double



x0 = 300: y0 = 300

r = 150

 For i = 0 To 360 Step 15



        x2 = x0 + r * Cos(i): y2 = y0 + r * Sin(i)



    ActiveSheet.Shapes.AddLine(x0, y0, x2, y2).Select

    Selection.Name = "line_" & i

    Selection.ShapeRange.Fill.Transparency = 0#

   

    With Selection.ShapeRange.Line

        .Weight = 0.75

        .DashStyle = msoLineSolid

        .Style = msoLineSingle

        .ForeColor.RGB = RGB(100, 80, 150)

        .Visible = msoTrue

    End With

 Next i

End Sub

Применение программ VBA 6 без ее установки

Привет!
Сделал программку в VBA6.0 – выбор домашнего любимца.
Но работает только у меня, где установлена эта программа.
 Как сделать так, чтобы ею пользовались все, даже если нет программы?

настроение: Занятое

Метки: VBA, программирование, excel

Артур Lion, 07-05-2008 02:30 (ссылка)

Как сделать программу для рисования на форме?

Как сделать программу для рисования на форме?

Свойство формы MousePointer установим в 99-Custom.
Свойству формы MouseIcon, зададим курсор из папки:
Program Files\Microsoft Visual Studio\COMMON\Graphics\Cursors\PENCIL.cur

Подключаемые библиотеки/компоненты:
нет

Стандартные компоненты:
нет
Код:
Option Explicit

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = 1 Then Form1.PSet (X, Y)
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = 1 Then Form1.Line -(X, Y), vbBlue
End Sub

Артур Lion, 07-05-2008 02:26 (ссылка)

Перемещение картинки

Перемещение картинки


Option Explicit
Dim downX, downY

Private Sub Image1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
downX = X
downY = Y
End Sub

Private Sub Image1_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Image1.Left = Image1.Left + X - downX
Image1.Top = Image1.Top + Y - downY
End If
End Sub

Метки: VBA, программирование

Taras Zayats, 04-11-2010 13:42 (ссылка)

как повернуть линиию относительно любой опорной точки

Здравствуйте, уважаемые любители VBA!
Мне очень бы хотелось получить
ответ на следующий вопрос или хотя бы, чтобы кто-то натолкнул на
правильный путь решения данной задачи.
В Excel с помощью VBA мне
нужно по большому счету создавать электрические схемы, поскольку я
хочу, чтобы просчитав параметры схемы в Excel рисовалась тут же схема,
не прибегая непосредственно к рисованию.
 Мне нужно решить простую задачу, а именно:
нарисовать
линию или фигуру и повернуть ее. Но повернуть нужно программно не
относительно середины, как это делает Excel, а относительно конца линии
или любой опорной точки, которую я например хотел бы выбрать.
Повернуть линию относительно конца в Excel можно, нажав при повороте клавишу Shift, а как это сделать программно я не знаю.
Приведу
следующий код, где рисуется серия линий по кругу, но поворачиваются они
относительно середины, а мне нужно, чтобы опорная точка была на конце
линии.    

Sub Поворот()
'
'19.10.2010
' Макрос записан 18.10.2005 (1)
'

For i = 10 To 200 Step 30
   With ActiveSheet.Shapes.AddLine(200, 200, 300, 200)

.Select
         With Selection.ShapeRange
         
           With .Line
                .Weight = 0.75
                .DashStyle = msoLineSolid
                .Style = msoLineSingle
                .Transparency = 0#
                .Visible = msoTrue
                .ForeColor.SchemeColor = 14
            End With
                .LockAspectRatio = msoTrue
                .Height = 0#
                .Width = 99.75
                .Rotation = i

          
        End With
    End With
Next i
End Sub

Использование GetOpenFilename с параметром MultiSelect:=True

Как использовать метод GetOpenFilename для открытия нескольких файлов.
 
код написал слдедующим образом:
 
Invoice = Application.GetOpenFilename(FileFilter:="Файлы .xls, *.xls", Title:="Открыть файлы ...", MultiSelect:=True)
Workbooks.OpenText Filename:=Invoice
 
но при попытке выполнить сообщается об ошибке. Без параметра - MultiSelect:=True,
работает нормально, но только с одним файлом.

В этой группе, возможно, есть записи, доступные только её участникам.
Чтобы их читать, Вам нужно вступить в группу