usar recursos externos no vba não é algo tão irregular assim,
mas criar DLL´s para trabalhar no excel normalmente depende de um novo aprendizado em uma nova linguagem oq nem sempre é pratico e facil , alguns tem capacidade outros não tem tempo ou paciência de aprender algo novo
mas em que montar uma dll pode me ser util?
Recusos, pode ficar mais facil criar algo
Velocidade, o excel e o vba estão longe de serem lentos se pegarem os macetes, mas realmente tem coisas que fica dificil melhorar a velocidade quando se fala de bilhões de analises, então uma dll com uma função otimizada e compilada pode ser a solução
Proteção "não que seja impossível quebrar a proteção ou redefinir o projeto, mas fica bem mais dificil"
quem é que vai querer perder tempo em fazer programação reversa de uma dll para piratear uma planilha?
meu motivo é apenas velocidade para grande quantidade de dados,
para quem está acostumado com o basic do vba é um tanto estranho tentar fazer algo no C ou java por exemplo ,
para quem tem facilidade por que não?
tem o vb, cara tem tanto detalhe para cria uma simples dll ... "ok , preguiça"
bem eu achei o Oxygen basic,
é um projeto aberto e pode ser usado por qualquer um,
é bem simples mas é possível escrever funções em algo bem parecido da sintaxe do vba,
e é compilado e não interpretada ,
'StaticArrays
'access static arrays
#include "$/inc/console.inc"
indexbase 0
' One dimension
dim as float line[4] => {1.0, 2.0, 3.0, 4.0}
printl "Line: " & cr
for i=0 to <4 : print line[i] & " " : next : printl
' Two dimensions, row, column
dim as float matrix [3*4] => {
11.0, 12.0, 13.0, 14.0,
15.0, 16.0, 17.0, 18.0,
19.0, 20.0, 21.0, 22.0 }
'Get elements
'y-> x
macro gmatrix(y,x) matrix[y*4 +x]
printl "Matrix:"
num=10
for i=0 to <3 ' row
printl "row" i ": "
for j=0 to <4 ' col
num+=1
print gmatrix(i,j) & "(" num "), "
next
next
printl
' Three dimensions, row, column, depth
dim as int cube[2*3*4] => {
11,12,13,14, 15,16,17,18, 19,20,21,22, 'row(0)
23,24,25,26, 27,28,29,30, 31,32,33,34 } 'row(1)
'Get elements
'z-> y-> x
macro gcube(z,y,x) cube[z*3*4 +y*4 +x]
num=10
printl "Cube: "
for i=0 to <2 'row
printl "row " i ": "
for j=0 to <3 'col
printl "col " j ": "
for k= 0 to <4 'depth
num+=1
print gcube(i,j,k) & "(" num "), "
next k
next j
next i
printl
' Four dimensions, row, column, depth, time
dim as int sptime[5*4*3*2] => {0}
'Fetch elements
'z-> y-> x-> w
macro gsptime(z,y,x,w) sptime[z*4*3*2 +y*3*2 +x*2 +w]
printl "Space-Time: "
printl "Ask Einstein"
printl cr & "Enter ..."
waitkey
dá para misturar até assembly
includepath "$/inc/"
$filename "And32count.dll"
$dll
include "RTL32.inc"
extern export
function And32(long a,b,*c)'
nesse caso diferente do vba todos assumem long, tbm pode ser excrito assim function And32(long a,b,byref c)
mov eax, a
mov ecx, b 'avoid using ebx
and eax, ecx
addr edi ,c
mov [edi] , eax
'the compiler will produce similar assembly code:
'c=a and b
end function
para declarar a DLL
no vba
Private Declare Sub And32 Lib "D:ProgramaçãoOxygenBasicAnd32count.dll" Alias "And32" _
(ByVal n As Long, ByVal n2 As Long, ByRef out As Long)
me digam , vale a pena ou não?
acho que para quem quer proteger seus projetos tem um caminho para migrar suas rotinas mais importantes e referenciar elas dentro do vba
Postado : 24/12/2017 11:04 am